#include "logic.h"
bool Comp::compare(std::string o1,std::string op,std::string o2)
{
    if(op=="$eq")
    {
        if(o1==o2)
            return true;
    }
    return false;
}
bool Comp::compare(int o1,std::string op,int o2)
{
     if(op=="$eq")
     {
         return (o1==o1);
     }
     else if(op=="$gte")
     {
          return (o1>=o1);
     }
     else if(op=="$gt")
     {
          return (o1>o2);
     }
     else if(op=="$lt")
     {
          return (o1<o2);
     }
     else if(op=="$lte")
     {
          return (o1<=o2);
     }
     else
         return false;
}                                      
bool Comp::compare(double o1,std::string op,double o2)
{
    if(op=="$eq")
    {
        return (o1==o2);
    }
    else if(op=="$gte")
    {
        return (o1>=o2);
    }
    else if(op=="$gt")
    {
        return (o1>o2);
    }
    else if(op=="$lt")
    {
        return (o1<o2);
    }
    else if(op=="$lte")
    {
        return (o1<=o2);
    }
    else
        return false;
}


bool isValidCVE(mongo::DBClientConnection *c,std::string destIP,std::string CVE)
{
    mongo::BSONObjBuilder x;
    x.append("DIP",destIP);
    x.append("CVE",CVE);
    //std::cout<<"Infunction:"<<destIP<<":"<<CVE<<std::endl;
    try
    {
        //std::auto_ptr<mongo::DBClientCursor> cursor
        mongo::BSONObj r=c->findOne(CVECOLL,x.obj());
        if(!r.isEmpty())
        {
            
            //std::cout<<"CVEMATCH:"<<cursor->next().toString()<<std::endl;
            return true;
        }
            //std::cout<<"to return false:"<<std::endl;
            return false;
    }
    catch(mongo::DBException e)
    {
        std::cerr<<"Error:isValidCVE():"<<e.what()<<std::endl;
    }
    return false;
}

bool hasCount(mongo::DBClientConnection *c,std::string op,int value,mongo::BSONObj & q)
{
    int count;
    try
    {
        std::auto_ptr<mongo::DBClientCursor> cursor=c->query(OBJECTCOLL,q);
        count=cursor->itcount();
    }
    catch(mongo::DBException e)
    {
        std::cerr<<"Error:hasCount():"<<e.what()<<std::endl;
        return false;
    }
    //std::cout<<"Count:"<<count<<std::endl;
    Comp obj;
    return obj.compare(count,op,value);
}
std::string getLogType(mongo::BSONObj &o)
{
    if(o.hasField("logType"))
        return o["logType"].str();
        else
            return "";
}

std::string getTimestamp(mongo::BSONObj &o)
{
    if(o.hasField("timestamp"))
        return o["timestamp"].str();
        else
            return "";
}

